d = {'Michael': 85, 'Bob': 75, 'Tracy': 90}  # dict存储了字典式的对应，即key-->value
d['Bob'] = 76  # 修改Bob的成绩为76
print(d['Bob'])  # 打印出76

# 在字典中查找信息的两种方式
if 'Tracy' in d:
    print('能查到%s的成绩为%d' % ('Tracy', d['Tracy']))
if d.get('Michael'):
    print('能查到%s的成绩为%d，并进行删除' % ('Michael', d['Michael']))
    d.pop('Michael')  # 删除名为Michael的key
    d['Michael'] = 85  # 重新加入名为Michael的key

# 不能反向查找，比如此dict中不能根据分数查找人名
if 85 not in d:
    print('查不到Tracy的信息')  # 根据分数查找不到Tracy的信息

# 请务必注意，dict内部存放的顺序和key放入的顺序是没有关系的。

# 和list比较，dict有以下几个特点：
# 没有重复的key
# 查找和插入的速度极快，不会随着key的增加而变慢；
# 需要占用大量的内存，内存浪费多。
# 只能修改value，不能修改key

# 而list相反：
# 查找和插入的时间随着元素的增加而增加；
# 占用空间小，浪费内存很少。
# 所以，dict是用空间来换取时间的一种方法。


# set和dict类似，也是一组key的集合，但不存储value。
# 由于key不能重复，所以，在set中，没 有 重 复 的 key ！
s1 = set([1, 2, 3, 4])  # set可以由一个现有的list创建，注意list里面的重复元素将会被自动略去
print(s1)  # 输出{1, 2, 3, 4}
s1.remove(4)  # 移除3
print(s1)  # 输出{1, 2, 3}
# set可以看成数学意义上的无序和无重复元素的集合，因此，两个set可以做数学意义上的交集、并集等操作：
s2 = set([2, 3, 4])
print('交集为', s1 | s2)  # {1, 2, 3, 4}
print('并集为', s1 & s2)  # {2, 3}
